package com.yanghui.controller.admin;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author YH
 */
@RequestMapping("/admin")
@Controller
public class FileControllerAdmin {


    /**
     * 删除文件
     */
    @RequestMapping("/deleteFile")
    @ResponseBody
    public Map<String,Object> deleteFile(@RequestParam("path") String filePath) {
        Map<String,Object> map = new HashMap<>();

        /** 把 / 替换成磁盘上所使用的路径分割符 */
        filePath = filePath.replace("/", File.separator);
        File delFile = new File("D:" + filePath);

        /** 如果文件存在并且且不是文件夹，执行删除文件操作，否则不删除 */
        if (delFile.exists()) {
            if (delFile.isDirectory() != true) {
                delFile.delete();
                map.put("status", 200);
                map.put("msg", "删除成功！");
            } else {
               map.put("status", 550);
               map.put("msg", "删除的是文件夹！");
            }
        } else {
            map.put("status", 500);
            map.put("msg", "服务器内部错误！");
        }

        return map;
    }

    /**
     * 获取某个路径下的所有文件
     *
     */
    @RequestMapping("/getFileList")
    @ResponseBody
    public Map<String,Object> getFileList(String folder) {
        /** 根路径 */
        String filePath = "D:" + File.separator + "upload" + File.separator + folder;
        List<String> fileList = new ArrayList<>();
        fileList = getFiles(filePath, fileList);
        Map<String,Object> map = new HashMap<>();

        if (fileList.size() > 0) {
            map.put("status", 200);
        } else {
            map.put("status", 500);
        }
        map.put("fileList", fileList);

        return map;
    }

    /**
     * 得到某一目录下的所有文件路径
     */
    private List<String> getFiles(String filePath, List<String> fileList) {
        List<String> fileListAll = fileList;
        File root = new File(filePath);
        /** 得到路径下的所有文件和文件夹 */
        File[] files = root.listFiles();

        if (files != null) {
            for (File file : files) {
                /** 如果是文件夹，则通过递归方式得到它的所有文件路径 */
                if (file.isDirectory()) {
                    /** 把盘符去掉 */
                    String[] path = file.getAbsolutePath().split(":");
                    /** 因为是在浏览器中引用，所以需要将 "\\" 转换成 "/" */
                    getFiles(path[1].replace("\\", "/"), fileListAll);
                } else {
                    String[] path = file.getAbsolutePath().split(":");
                    fileList.add(path[1].replace("\\", "/"));
                }
            }
        }

        return fileListAll;
    }
}
